#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>

int main(int argc, char const *argv[])
{
    printf("main进程(%d)开始执行 \n", getpid());

    pid_t pid = fork();
    if (pid == 0) { // 当前执行的是子进程
        printf("子进程(%d)开始执行\n", getpid());
        // 执行另一个程序:other
        char *path = "other2";
        char *argv[] = {path, "abc", NULL};  // 数组的最后一个元素必须是NULL
        char *envp[] = {NULL}; // 表示使用默认的环境变量
        // execve: 如果找到了对应的程序，内部会先清空当前进程的内存，然后加载指定程序来生对应的内存空间数据
        int result = execve(path, argv, NULL);
        printf("execve找不到对应的程序执行， 失败了 result=%d\n", result);

    } else { // 当前执行的父进程，也Main进程
        printf("父进程(%d)继续执行\n", getpid());
    }

    return 0;
}
